package es.gesfutbol.web;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.criterion.Order;
import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import es.gesfutbol.dao.IJornadaDao;
import es.gesfutbol.dao.ILligaDao;
import es.gesfutbol.dao.IPartitDao;
import es.gesfutbol.dao.IPartitDeQuinielaDao;
import es.gesfutbol.dao.IQuinielaDao;
import es.gesfutbol.domini.implementacio.Equip;
import es.gesfutbol.domini.implementacio.Jornada;
import es.gesfutbol.domini.implementacio.Lliga;
import es.gesfutbol.domini.implementacio.Partit;
import es.gesfutbol.domini.implementacio.PartitDeQuiniela;
import es.gesfutbol.domini.implementacio.Quiniela;

public class PartitDeQuinielaController extends MultiActionController{
	
	private IJornadaDao jornadaDao;
	private ILligaDao lligaDao;
	private IQuinielaDao quinielaDao;
	private IPartitDeQuinielaDao partitDeQuinielaDao;
	private IPartitDao partitDao;
	
	public IJornadaDao getJornadaDao() {
		return jornadaDao;
	}

	public void setJornadaDao(IJornadaDao jornadaDao) {
		this.jornadaDao = jornadaDao;
	}
	
	public ILligaDao getLligaDao() {
		return lligaDao;
	}

	public void setLligaDao(ILligaDao lligaDao) {
		this.lligaDao = lligaDao;
	}
	
	public IPartitDeQuinielaDao getPartitDeQuinielaDao(){
		return partitDeQuinielaDao;
	}
	
	public void setPartitDeQuinielaDao(IPartitDeQuinielaDao partitDeQuinielaDao){
		this.partitDeQuinielaDao = partitDeQuinielaDao;
	}
	
	public IQuinielaDao getQuinielaDao(){
		return quinielaDao;
	}
	
	public void setQuinielaDao(IQuinielaDao quinielaDao){
		this.quinielaDao = quinielaDao;
	}
	
	public IPartitDao getPartitDao(){
		return partitDao;
	}
	
	public void setPartitDao(IPartitDao partitDao){
		this.partitDao = partitDao;
	}
	
	public ModelAndView viewPartitsDeQuiniela(HttpServletRequest request,
			HttpServletResponse response){
					
				List<Lliga> lligues = lligaDao.findAll();
				List<Jornada> jornades = jornadaDao.findAll( Order.asc("data"));
				List<Partit> partits = partitDao.findAll();
		
				Long idQuiniela = Long.parseLong(request.getParameter("idQuiniela"));
				Quiniela quinielaActual = quinielaDao.findById(idQuiniela);

				List<PartitDeQuiniela> partitsDeQuiniela = partitDeQuinielaDao.findByIdQuiniela(idQuiniela);
			
				partitsDeQuiniela = partitDeQuinielaDao.deproxylist(partitsDeQuiniela);
				
				Iterator<PartitDeQuiniela> it = partitsDeQuiniela.iterator();
				List<PartitDeQuiniela> partitsDQ2 = new ArrayList<PartitDeQuiniela>();
		    	while(it.hasNext()) {
		    		PartitDeQuiniela partitDeQuiniela = it.next();
		    		Partit partit = partitDeQuiniela.getPartit();
		    		partit = partitDao.deproxylock(partit);
		    		partitDeQuiniela.setPartit(partit);
		    		partitsDQ2.add(partitDeQuiniela);
		    	}	    	
				
				PartitDeQuiniela nouPartitDeQuiniela = new PartitDeQuiniela();
				Lliga lliga = new Lliga();
				Jornada jornada = new Jornada();
				Partit partit = new Partit();
				Equip equip = new Equip();
				partit.setEquipLocal(equip);
				partit.setEquipVisitant(equip);
				jornada.setLliga(lliga);
				partit.setJornada(jornada);
				nouPartitDeQuiniela.setPartit(partit);
				nouPartitDeQuiniela.setQuiniela(new Quiniela());

				ModelMap modelMap = new ModelMap();
				modelMap.put("llistatLligues", lligues);
				modelMap.put("llistatJornades", jornades);
				modelMap.put("llistatPartits", partits);
				modelMap.put("quinielaActual", quinielaActual);
				modelMap.put("partitDeQuiniela", nouPartitDeQuiniela);
				modelMap.put("llistatPartitsDeQuiniela", partitsDQ2);
				return new ModelAndView("administracion/partitsDeQuiniela", modelMap);		
	}
	
	public ModelAndView addOrUpdate(HttpServletRequest request,
			HttpServletResponse response, PartitDeQuiniela partitDeQuiniela){
		
				Long idPartit = Long.parseLong(request.getParameter("partido"));
				Partit partit = partitDao.findById(idPartit);
				
				Long idQuiniela = Long.parseLong(request.getParameter("idQuiniela"));
				Quiniela quinielaActual = quinielaDao.findById(idQuiniela);
				
				partitDeQuiniela.setPartit(partit);
				partitDeQuiniela.setQuiniela(quinielaActual);
				
				partitDeQuinielaDao.save(partitDeQuiniela);				
							
				String sQuiniela= idQuiniela.toString();
				String sURL = "redirect:viewPartitsDeQuiniela.htm?idQuiniela=";
				String redirect= sURL.concat(sQuiniela);
		
				return new ModelAndView(redirect);
	}
	
	public ModelAndView viewUpdate(HttpServletRequest request,
			HttpServletResponse response){
		
			List<Lliga> lligues = lligaDao.findAll();
			List<Jornada> jornades = jornadaDao.findAll( Order.asc("data"));
			List<Partit> partits = partitDao.findAll();
			
			Long idQuiniela = Long.parseLong(request.getParameter("idQuiniela"));
			Quiniela quinielaActual = quinielaDao.findById(idQuiniela);
			quinielaActual = quinielaDao.deproxy(quinielaActual);
			
			Long idPartitDeQuiniela = Long.parseLong(request.getParameter("idPartitDeQuiniela"));
			PartitDeQuiniela partitDeQuiniela = partitDeQuinielaDao.findById(idPartitDeQuiniela);
			
			List<PartitDeQuiniela> partitsDeQuiniela = partitDeQuinielaDao.findByIdQuiniela(idQuiniela);
//			Set<PartitDeQuiniela> partitsDeQuiniela = new HashSet<PartitDeQuiniela>(pDQ);
		
			partitsDeQuiniela = partitDeQuinielaDao.deproxylist(partitsDeQuiniela);
			
			Iterator<PartitDeQuiniela> it = partitsDeQuiniela.iterator();
			List<PartitDeQuiniela> partitsDQ2 = new ArrayList<PartitDeQuiniela>();
	    	while(it.hasNext()) {
	    		PartitDeQuiniela partitDeQuiniela2 = it.next();
	    		Partit partit = partitDeQuiniela2.getPartit();
	    		partit = partitDao.deproxylock(partit);
	    		partitDeQuiniela2.setPartit(partit);
	    		partitsDQ2.add(partitDeQuiniela2);
	    	}
			
			ModelMap model = new ModelMap();
			model.put("quinielaActual", quinielaActual);
			model.put("partitsDeQuiniela", partitsDQ2);
			model.put("partitDeQuiniela", partitDeQuiniela);
			model.put("llistatLligues", lligues);
			model.put("llistatJornades", jornades);
			model.put("llistatPartits", partits);
			return new ModelAndView("administracion/partitsDeQuiniela", model);
	}
	
	public ModelAndView delete(HttpServletRequest request,
			HttpServletResponse response){
		
			Long idQuiniela = Long.parseLong(request.getParameter("idQuiniela"));
			Long idPartitDeQuiniela = Long.parseLong(request.getParameter("idPartitDeQuiniela"));
			
			partitDeQuinielaDao.delete(idPartitDeQuiniela);
			
			String sQuiniela= idQuiniela.toString();
			String sURL = "redirect:viewPartitsDeQuiniela.htm?idQuiniela=";
			
			String redirect= sURL.concat(sQuiniela);
	
			return new ModelAndView(redirect);
	}
	
	public ModelAndView introAnalisis(HttpServletRequest request,
			HttpServletResponse response){
			
			
		
			return null;		
	}
	
}
